#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    mainWindow(new Ui::MainWindow)
{
    mainWindow->setupUi(this);
    //启动定时器,返回定时器id
    timerId =  this->startTimer(1000);

    connect(mainWindow->pushButton,&Button::clicked,
            [=](){
        qDebug()<<"Main connect event print";
    });

    //注册拦截器
    mainWindow->LabelFilter->installEventFilter(this);
    mainWindow->LabelFilter->setMouseTracking(true);
    this->setMouseTracking(true);
    this->installEventFilter(this);
}
void MainWindow::mousePressEvent(QMouseEvent *qme)
{
    qDebug()<<"Main connect mousePressEvent print";
}
MainWindow::~MainWindow()
{
    delete mainWindow;
}
void MainWindow::timerEvent(QTimerEvent *qte)
{
    static int i = 0;
    mainWindow->label->setText(QString("<center style='color:red'><h1>Time %1</h1></center>").arg(i++));
    //满足条件时终止定时器
    if(i==10)
        this->killTimer(timerId);
}
void MainWindow::closeEvent(QCloseEvent *qce)
{
    int ret =  QMessageBox::question(
                this
                ,"提示"
                ,"确认要关闭吗？"
                ,QMessageBox::Yes|QMessageBox::Cancel
                ,QMessageBox::Yes
                );
    if (ret==QMessageBox::Yes) {
        qDebug()<<"你输入的是 YES";
        qce->accept();
    }else {
        qDebug()<<"你输入的是 Cancel";
        qce->ignore();
    }
}
//重写事件拦截器,拦截前需要该组件注册了拦截器
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if (watched==mainWindow->LabelFilter) {
        QMouseEvent* qme =static_cast<QMouseEvent*>(event);
        if (event->type()==QEvent::Type::MouseMove) {
            mainWindow->LabelFilter->setText(
                        QString("<h1>Mouse:(%1,%2)</h1>")
                        .arg(qme->x())
                        .arg(qme->y()));
            return true;
        }
    }

    return QWidget::eventFilter(watched,event);
}

bool MainWindow::event(QEvent *qe)
{
    QEvent::Type eType =  qe->type();
    switch (eType) {
    case QEvent::Type::MouseMove:
        qDebug()<<"MouseMove";
        break;
    case QEvent::Type::Close:
        qDebug()<<"Close";
        break;
    case QEvent::Type::Enter:
        qDebug()<<"Enter";
        break;
    default:
        break;
    }
    return QWidget::event(qe);
}

void MainWindow::keyPressEvent(QKeyEvent *event)
{
    //    qDebug()<<static_cast<char>(event->key()) ;
    switch (event->key()) {

    case Qt::Key_Escape     :  qDebug()<<"Key_Escape"; break;
    case Qt::Key_Tab        :  qDebug()<<"Key_Tab"; break;
    case Qt::Key_Backtab    :  qDebug()<<"Key_Backtab"; break;
    case Qt::Key_Backspace  :  qDebug()<<"Key_Backspace"; break;
    case Qt::Key_Return     :  qDebug()<<"Key_Return"; break;
    case Qt::Key_Enter      :  qDebug()<<"Key_Enter"; break;
    case Qt::Key_Insert     :  qDebug()<<"Key_Insert"; break;
    case Qt::Key_Delete     :  qDebug()<<"Key_Delete"; break;
    case Qt::Key_Pause      :  qDebug()<<"Key_Pause"; break;
    case Qt::Key_Print      :  qDebug()<<"Key_Print"; break;
    case Qt::Key_SysReq     :  qDebug()<<""; break;
    case Qt::Key_Clear      :  qDebug()<<""; break;
    case Qt::Key_Home       :  qDebug()<<"Key_Home"; break;
    case Qt::Key_End        :  qDebug()<<"Key_End"; break;
    case Qt::Key_Left       :  qDebug()<<"Key_Left"; break;
    case Qt::Key_Up         :  qDebug()<<"Key_Up"; break;
    case Qt::Key_Right      :  qDebug()<<"Key_Right"; break;
    case Qt::Key_Down       :  qDebug()<<"Key_Down"; break;
    case Qt::Key_PageUp     :  qDebug()<<"Key_PageUp"; break;
    case Qt::Key_PageDown   :  qDebug()<<"Key_PageDown"; break;
    case Qt::Key_Shift      :  qDebug()<<""; break;
    case Qt::Key_Control    :  qDebug()<<""; break;
    case Qt::Key_Meta       :  qDebug()<<""; break;
    case Qt::Key_Alt        :  qDebug()<<"Key_Alt"; break;
    case Qt::Key_AltGr      :  qDebug()<<"Key_AltGr"; break;
    case Qt::Key_CapsLock   :  qDebug()<<""; break;
    case Qt::Key_NumLock    :  qDebug()<<"Key_NumLock"; break;
    case Qt::Key_ScrollLock :  qDebug()<<""; break;
    case Qt::Key_F1         :  qDebug()<<"Key_F1"; break;
    case Qt::Key_F2         :  qDebug()<<""; break;
    case Qt::Key_F3         :  qDebug()<<""; break;
    case Qt::Key_F4         :  qDebug()<<""; break;
    case Qt::Key_F5         :  qDebug()<<""; break;
    case Qt::Key_F6         :  qDebug()<<""; break;
    case Qt::Key_F7         :  qDebug()<<""; break;
    case Qt::Key_F8         :  qDebug()<<"Key_F8"; break;
    case Qt::Key_F9         :  qDebug()<<""; break;
    case Qt::Key_F10        :  qDebug()<<""; break;
    case Qt::Key_F11        :  qDebug()<<""; break;
    case Qt::Key_F12        :  qDebug()<<""; break;
    case Qt::Key_F13        :  qDebug()<<""; break;
    case Qt::Key_F14        :  qDebug()<<""; break;
    case Qt::Key_F15        :  qDebug()<<""; break;
    case Qt::Key_F16        :  qDebug()<<""; break;
    case Qt::Key_F17        :  qDebug()<<""; break;
    case Qt::Key_F18        :  qDebug()<<""; break;
    case Qt::Key_F19        :  qDebug()<<""; break;
    case Qt::Key_F20        :  qDebug()<<""; break;
    case Qt::Key_F21        :  qDebug()<<""; break;
    case Qt::Key_F22        :  qDebug()<<""; break;
    case Qt::Key_F23        :  qDebug()<<""; break;
    case Qt::Key_F24        :  qDebug()<<""; break;
    case Qt::Key_F25        :  qDebug()<<""; break;
    case Qt::Key_F26        :  qDebug()<<""; break;
    case Qt::Key_F27        :  qDebug()<<""; break;
    case Qt::Key_F28        :  qDebug()<<""; break;
    case Qt::Key_F29        :  qDebug()<<""; break;
    case Qt::Key_F30        :  qDebug()<<""; break;
    case Qt::Key_F31        :  qDebug()<<""; break;
    case Qt::Key_F32        :  qDebug()<<""; break;
    case Qt::Key_F33        :  qDebug()<<""; break;
    case Qt::Key_F34        :  qDebug()<<""; break;
    case Qt::Key_F35        :  qDebug()<<""; break;
    case Qt::Key_Super_L    :  qDebug()<<""; break;
    case Qt::Key_Super_R    :  qDebug()<<""; break;
    case Qt::Key_Menu       :  qDebug()<<""; break;
    case Qt::Key_Hyper_L    :  qDebug()<<""; break;
    case Qt::Key_Hyper_R    :  qDebug()<<""; break;
    case Qt::Key_Help       :  qDebug()<<""; break;
    case Qt::Key_Direction_L:  qDebug()<<""; break;
    case Qt::Key_Direction_R:  qDebug()<<""; break;
    case Qt::Key_Space      :  qDebug()<<""; break;
    case Qt::Key_Exclam     :  qDebug()<<""; break;
    case Qt::Key_QuoteDbl   :  qDebug()<<""; break;
    case Qt::Key_NumberSign :  qDebug()<<""; break;
    case Qt::Key_Dollar     :  qDebug()<<""; break;
    case Qt::Key_Percent    :  qDebug()<<""; break;
    case Qt::Key_Ampersand  :  qDebug()<<""; break;
    case Qt::Key_Apostrophe :  qDebug()<<""; break;
    case Qt::Key_ParenLeft  :  qDebug()<<""; break;
    case Qt::Key_ParenRight :  qDebug()<<""; break;
    case Qt::Key_Asterisk   :  qDebug()<<""; break;
    case Qt::Key_Plus       :  qDebug()<<""; break;
    case Qt::Key_Comma      :  qDebug()<<""; break;
    case Qt::Key_Minus      :  qDebug()<<""; break;
    case Qt::Key_Period     :  qDebug()<<""; break;
    case Qt::Key_Slash      :  qDebug()<<""; break;
    case Qt::Key_0          :  qDebug()<<"Key_0"; break;
    case Qt::Key_1          :  qDebug()<<""; break;
    case Qt::Key_2          :  qDebug()<<""; break;
    case Qt::Key_3          :  qDebug()<<""; break;
    case Qt::Key_4          :  qDebug()<<""; break;
    case Qt::Key_5          :  qDebug()<<""; break;
    case Qt::Key_6          :  qDebug()<<""; break;
    case Qt::Key_7          :  qDebug()<<""; break;
    case Qt::Key_8          :  qDebug()<<""; break;
    case Qt::Key_9          :  qDebug()<<""; break;
    case Qt::Key_Colon      :  qDebug()<<""; break;
    case Qt::Key_Semicolon  :  qDebug()<<""; break;
    case Qt::Key_Less       :  qDebug()<<""; break;
    case Qt::Key_Equal      :  qDebug()<<""; break;
    case Qt::Key_Greater    :  qDebug()<<""; break;
    case Qt::Key_Question   :  qDebug()<<""; break;
    case Qt::Key_At         :  qDebug()<<""; break;
    case Qt::Key_A          :  qDebug()<<"Key_A"; break;
    case Qt::Key_B          :  qDebug()<<""; break;
    case Qt::Key_C          :  qDebug()<<""; break;
    case Qt::Key_D          :  qDebug()<<""; break;
    case Qt::Key_E          :  qDebug()<<""; break;
    case Qt::Key_F          :  qDebug()<<""; break;
    case Qt::Key_G          :  qDebug()<<""; break;
    case Qt::Key_H          :  qDebug()<<""; break;
    case Qt::Key_I          :  qDebug()<<""; break;
    case Qt::Key_J          :  qDebug()<<""; break;
    case Qt::Key_K          :  qDebug()<<""; break;
    case Qt::Key_L          :  qDebug()<<""; break;
    case Qt::Key_M          :  qDebug()<<""; break;
    case Qt::Key_N          :  qDebug()<<""; break;
    case Qt::Key_O          :  qDebug()<<""; break;
    case Qt::Key_P          :  qDebug()<<""; break;
    case Qt::Key_Q          :  qDebug()<<""; break;
    case Qt::Key_R          :  qDebug()<<""; break;
    case Qt::Key_S          :  qDebug()<<""; break;
    case Qt::Key_T          :  qDebug()<<""; break;
    case Qt::Key_U          :  qDebug()<<""; break;
    case Qt::Key_V          :  qDebug()<<""; break;
    case Qt::Key_W          :  qDebug()<<""; break;
    case Qt::Key_X          :  qDebug()<<""; break;
    case Qt::Key_Y          :  qDebug()<<""; break;
    case Qt::Key_Z          :  qDebug()<<""; break;
    default: qDebug()<<"未识别的按键"; break;
    }
}
